#ifndef FTPCOMMANDPARSER_H
#define FTPCOMMANDPARSER_H

#include <string>
#include "FtpCommandObserver.h"

class FtpCommandParser
{
public:
	FtpCommandParser();
	~FtpCommandParser();

	void Parse(const std::string& line);
	void RegisterObserver(FtpCommandObserver* newObserver);
	void RemoveObserver();
	

private:
	struct FtpCommandEntry
	{
		std::string command;
		void (FtpCommandParser::*handler)(const std::string& arg);
	};

	typedef struct FtpCommandEntry FtpCommandEntry;

	static FtpCommandEntry commandList[];

	void OnUser(const std::string& arg);
	void OnPass(const std::string& arg);
	void OnList(const std::string& arg);
	void OnSyst(const std::string& arg);
	void OnPort(const std::string& arg);
	void OnCwd(const std::string& arg);
	void OnPwd(const std::string& arg);
	void OnRmd(const std::string& arg);
	void OnMkd(const std::string& arg);
	void OnDele(const std::string& arg);
	void OnCdup(const std::string& arg);
	void OnRetr(const std::string& arg);
	void OnStor(const std::string& arg);
	void OnNoop(const std::string& arg);
	void OnQuit(const std::string& arg);
	void OnType(const std::string& arg);


	unsigned int CommandCount() const;

	FtpCommandObserver* observer;

};

#endif //FTPCOMMANDPARSER_H
